#Boa:Frame:Frame1
# -*- coding: utf-8 -*-

import wx
import wx.grid
import utiles
import consultasBD
import datetime
import Vista

enieconsola="\xa4"
enieacentuadadesktop="\xf1"
eacentuadadesktop="\xe9"

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1BUTTON3, 
 wxID_FRAME1BUTTON4, wxID_FRAME1BUTTON5, wxID_FRAME1COMBOBOX1, 
 wxID_FRAME1DATEPICKERCTRL1, wxID_FRAME1GRID1, wxID_FRAME1PANEL1, 
 wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, 
] = [wx.NewId() for _init_ctrls in range(12)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(255, 108), size=wx.Size(926, 456),
              style=wx.DEFAULT_FRAME_STYLE, title='Cumple Sucursales')
        self.SetClientSize(wx.Size(918, 429))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(918, 429),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='Sucursal', name='staticText1', parent=self.panel1,
              pos=wx.Point(8, 0), size=wx.Size(40, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label='NOTA: solo se muestran los cumpleanios del dia seleccionado.',
              name='staticText2', parent=self.panel1, pos=wx.Point(208, 40),
              size=wx.Size(345, 13), style=0)
        self.staticText2.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_FRAME1COMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(8, 16),
              size=wx.Size(192, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_FRAME1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self.panel1, pos=wx.Point(208, 16),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='Buscar',
              name='button1', parent=self.panel1, pos=wx.Point(296, 16),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnMostrar, id=wxID_FRAME1BUTTON1)

        self.button3 = wx.Button(id=wxID_FRAME1BUTTON3, label='Imprimir',
              name='button3', parent=self.panel1, pos=wx.Point(384, 16),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnImprimir, id=wxID_FRAME1BUTTON3)

        self.button5 = wx.Button(id=wxID_FRAME1BUTTON5, label='Enviar MAIL',
              name='button5', parent=self.panel1, pos=wx.Point(472, 16),
              size=wx.Size(75, 23), style=0)
        self.button5.Enable(False)
        self.button5.Bind(wx.EVT_BUTTON, self.OnEnviarEmail,
              id=wxID_FRAME1BUTTON5)

        self.button4 = wx.Button(id=wxID_FRAME1BUTTON4, label='Limpiar',
              name='button4', parent=self.panel1, pos=wx.Point(752, 16),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_FRAME1BUTTON4)

        self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label='Salir',
              name='button2', parent=self.panel1, pos=wx.Point(840, 16),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_FRAME1BUTTON2)

        self.grid1 = wx.grid.Grid(id=wxID_FRAME1GRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(8, 56), size=wx.Size(904, 368),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnDobleClickIzquierdo)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.comboSucursales()
        self.llenarGrilla()
        
    def comboSucursales(self):
        sucursal = utiles.getSucursalActiva()
        SQL = "SELECT nombre FROM sucursales WHERE codsucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox1.SetLabel(resultado[0]["nombre"])
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox1.Append(item["nombre"])
        misucursal = int(sucursal)-1
        self.comboBox1.SetLabel(self.comboBox1.GetItems()[misucursal])
        self.comboBox1.SetValue(self.comboBox1.GetItems()[misucursal])
        self.comboBox1.SetSelection(misucursal)
        self.comboBox1.SetEditable(False)

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def llenarGrilla(self):
        #nro,nombre,puntos,ultimallamada,telefono,email,localidad
        #0   1      2      3             4        5     6
        columnas = ['Numero\nCliente','Nombre','Puntaje','Ultima\nllamada','Telefono','e-mail','Localidad / Direccion']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.grid1.Refresh()

    def cumpleanos(self):
        if self.comboBox1.GetLabel()=="":
            utiles.mensaje(None,"Debe seleccionar sucursal")
            self.comboBox1.SetFocus()
            return ()
        sucu = str(self.comboBox1.GetSelection()+1) + "-%"
##        self.fecha = utiles.obtenerFecha("Y-m-d")
##        cumple = self.fecha[8:]+"/"+self.fecha[5:7]
##        
##        #verifico si el dia siguiente no es domingo
##        uno=""
##        sumoDomingo=""
##        anio=int(self.fecha[:4])
##        mes=int(self.fecha[5:7])
##        dia=int(self.fecha[8:])+1
##        try:
##            fechadomingo = datetime.date(anio, mes, dia)
##        except:
##            mes=int(self.fecha[5:7])+1
##            dia=1
##            fechadomingo = datetime.date(anio, mes, dia)
##        maniana=fechadomingo.strftime('%A')
##        if maniana=='Sunday': 
##            uno = str(dia)+"/"+str(mes)
##            sumoDomingo="OR cumple='%s'" % uno
##            b=uno.split("/")
##            if int(b[0])<10 :uno="0"+str(b[0])+"/"+str(b[1])
##            b=uno.split("/")
##            if int(b[1])<10 :uno=str(b[0])+"/0"+str(b[1])
##            sumoDomingo="OR cumple='%s'" % uno

        fecha = self.datePickerCtrl1.GetLabel()
        cumple = fecha[:2]+"/"+fecha[3:5]
        
##        r1 = "SELECT idcliente,nombre,telefono, \n"
##        r2 = "       email,direccion,localidad,cumple \n"
##        r3 = "FROM cliente WHERE (cumple = '%s' %s) \n" % (cumple, sumoDomingo)
##        r4 = "AND idcliente LIKE '%s' \n" % (sucu)
##        consulta = r1+r2+r3+r4

        r1 = "SELECT idcliente,nombre,telefono, \n"
        r2 = "       email,direccion,localidad,acumulados,listanegra \n"
        r3 = "FROM cliente WHERE cumple LIKE '%"+cumple+"%' \n"
        r4 = "     AND idcliente LIKE '%"+sucu+"%' \n"
        r5 = "ORDER BY acumulados DESC "
        consulta = r1+r2+r3+r4+r5

        resultado = consultasBD.ordenCrudaDict(consulta)
        return resultado

    def ultimoComunicado(self,idcliente):
        sql = "SELECT fecha FROM clientehistorial WHERE idcliente='"+idcliente+"' ORDER BY fecha DESC LIMIT 1"
        resultado = consultasBD.ordenCruda(sql)
        try:
            fecha,hora = str(resultado[0][0]).split(" ")
            fecha = utiles.invertirFecha2(fecha)
            return fecha+" "+hora
        except:
            return " "

    def OnMostrar(self, event):
        self.button1.Enable(False)
        self.button3.Enable(True)
        self.button5.Enable(True)
        clientes = self.cumpleanos()
        #idcliente,nombre,puntaje,telefono,email,localidad/direccion
        #0         1      2      3        4     5
        for fila,item in enumerate(clientes):
            self.grid1.SetCellValue(fila,0,item["idcliente"])
            self.grid1.SetCellValue(fila,1,item["nombre"])
            self.grid1.SetCellValue(fila,2,str(item["acumulados"]))
            self.grid1.SetCellAlignment(fila,2,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,4,item["telefono"])
            if str(item["listanegra"])!="1":
                self.grid1.SetCellValue(fila,5,item["email"])
            else:
                self.grid1.SetCellBackgroundColour(fila,5,ROJO)
            self.grid1.SetCellValue(fila,6,item["localidad"]+" / "+item["direccion"][:30])
            fechaUltimo = self.ultimoComunicado(item["idcliente"])
            self.grid1.SetCellValue(fila,3,fechaUltimo)
            self.grid1.AppendRows()
        self.ajustarAnchoColumnas()

    def OnSalir(self, event):
        self.Close()

    def OnDobleClickIzquierdo(self, event):
        fila = self.grid1.GetGridCursorRow()
        #idcliente,nombre,cumple,telefono,email,localidad/direccion
        #0         1      2      3        4     5
        idcliente = self.grid1.GetCellValue(fila,0)
        nombre = self.grid1.GetCellValue(fila,1)
        cumple = self.grid1.GetCellValue(fila,2)
        telefono = self.grid1.GetCellValue(fila,4)
        email = self.grid1.GetCellValue(fila,5)
        localidad = self.grid1.GetCellValue(fila,6)
        datos = {"idcliente":idcliente,"nombre":nombre,"cumple":cumple}
        datos["telefono"] = telefono
        datos["email"] = email
        datos["localidad"] = localidad
        
        activado = True
        lista = []
        import HistorialClienteComunica
        appBack = HistorialClienteComunica.create(None,datos,activado,lista)
        appBack.Show()

##        import HistorialCliente
##        appBack = HistorialCliente.create(None,idcliente)
##        appBack.Show()
##        return

    def OnImprimir(self, event):
        print "Imprimiendo"
        f=open("c:\\erpsussan.doc\\reporte-cumpleSucursal.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        nombresuc = self.comboBox1.GetLabel()
        
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="left" width="33%"><font size="0.1">'
            a+= 'SUSSAN BOUTIQUE Cumplea&ntilde;os<br>'+nombresuc+'</font></td>\n'
            a+= '<td valign="top" align="left" width="34%"><br>'
            a+= '<font size="0.1">'
            a+= '</font></td>\n'
            a+= '<td valign="top" align="right" width="33%"><font size="0.1">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</font></td>\n'
            a+= '</tr>\n'
            a+= '</table></font>\n'
            a+= '<hr>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            a = '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size="0.1">orden</font></td>\n'
            a+= '<td valign="top" align="left"><font size="0.1">Numero<br>Cliente</font></td>\n'
            a+= '<td valign="top" align="left"><font size="0.1">Nombre</font></td>\n'
            a+= '<td valign="top" align="right"><font size="0.1">Puntaje</font></td>\n'
            a+= '<td valign="top" align="left"><font size="0.1">Telefono</font></td>\n'
            a+= '<td valign="top" align="left"><font size="0.1">email</font></td>\n'
            a+= '<td valign="top" align="left"><font size="0.1">Localidad</font></td>\n'
            a+= '<td valign="top" align="left"><font size="0.1">Ultima<br>Llamada</font></td>\n'
            a+= '</tr>\n'
            a+= '<tr>\n'
            a+= '<td colspan="8"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)
        
        renglon = 0
        for i in xrange(self.grid1.GetNumberRows()-1):
        #PTC,CodSussan,Descripcion,Talle,Color,Stock\nCentral,Stock\nParana,Stock\nSaska,Stock\nPeatonal
            idcliente = self.grid1.GetCellValue(i,0)
            nombre = self.grid1.GetCellValue(i,1)
            puntaje = self.grid1.GetCellValue(i,2)
            telefono = self.grid1.GetCellValue(i,4)
            email = self.grid1.GetCellValue(i,5)
            localidad = self.grid1.GetCellValue(i,6).split(" / ")[0][:20]
            ultimallamada = self.grid1.GetCellValue(i,3)
            if "***" in nombre:
                telefono = ""
                email = "fallecido o en legales"
                localidad = ""
                ultimallamada = ""
            
            orden = str(i+1)

            cadena = '<tr>\n'
            cadena+= '<td valign="center" align="right"><font size="0.1">'+orden+'</font></td> \n'
            cadena+= '<td valign="center" align="left"><font size="0.1">'+idcliente+'</font></td> \n'
            cadena+= '<td valign="center" align="left"><font size="0.1">'+nombre+'</font></td> \n'
            cadena+= '<td valign="center" align="right"><font size="0.1">'+puntaje+'</font></td> \n'
            cadena+= '<td valign="center" align="left"><font size="0.1">'+telefono+'</font></td> \n'
            cadena+= '<td valign="center" align="left"><font size="0.1">'+email+'</font></td> \n'
            cadena+= '<td valign="center" align="left"><font size="0.1">'+localidad+'</font></td> \n'
            cadena+= '<td valign="center" align="left"><font size="0.1">'+ultimallamada+'</font></td> \n'
            cadena+= '</tr>\n'
            try:
                f.write(cadena)
            except:
                print cadena
            
            renglon+= 1
            
            if renglon >= totalItemPorPagina :
                renglon = 0
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
##                for i in xrange(numeroPagina):
##                    f.write("<br>\n")
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)
            
        cadena = '</table>\n'
        cadena+= '<br><font size="0.1">Total &iacute;tems: '+str(self.grid1.GetNumberRows()-1)+'</font>\n'
        cadena+= '<br><font size="0.1">Total p&aacute;ginas: '+str(numeroPagina)+'</font>\n'
        cadena+= '</body>\n</html>\n'
        f.write(cadena)
        f.close()

        self.button1.SetFocus()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\erpsussan.doc\\reporte-cumpleSucursal.html")

    def OnLimpiar(self, event):
        self.grid1.ClearGrid()
        for i in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.button1.Enable(True)
        self.button3.Enable(False)
        self.button5.Enable(False)
        self.comboBox1.SetFocus()

    def OnEnviarEmail(self, event):
        print "Enviando mails a clientes"
        #idcliente,nombre,cumple,puntos,telefono,email,localidad/direccion
        #0         1      2      3      4        5     6
        lista = []
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,0)=="": continue
            if self.grid1.GetCellValue(fil,5)=="": continue
            if "***" in self.grid1.GetCellValue(fil,1): continue
            nombre = self.grid1.GetCellValue(fil,1)
            email = self.grid1.GetCellValue(fil,5)
            lista.append((email,nombre))
        import mailcumpleanios
        mailcumpleanios.enviar(lista,0)
        self.button5.Enable(False)
